var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
const {responseMiddleware, errorHandler} = require('./tool/middleWare');

//todo 导入路由
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var authJwtRouter = require('./routes/auth_jwt')
var advisorRouter = require('./routes/advisor')
var orderRouter = require('./routes/order')
var commentRouter = require('./routes/comment')

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

//使用 morgan 中间件，并指定日志格式为 dev。这种格式在开发环境下会显示详细的请求信息，方便调试。
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(responseMiddleware)

//todo 注册路由
app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/', authJwtRouter)
app.use('/advisor', advisorRouter)
app.use('/order', orderRouter)
app.use('/comment', commentRouter)


// 这是一个全局的中间件，当所有路由都没有匹配到请求时，会执行这个中间件。
//它使用 createError(404) 创建一个 404 错误对象，并通过 next 函数将这个错误传递给下一个错误处理中间件。
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
// app.use(function(err, req, res, next) {
//     // 这两行代码设置了一些本地变量，用于在错误页面中显示错误信息。
//     //在开发环境下，会将完整的错误对象传递给视图，而在生产环境下，只传递一个空对象以避免暴露敏感信息。
//     res.locals.message = err.message;
//     res.locals.error = req.app.get('env') === 'development' ? err : {};
//
//     // 根据错误对象中的 status 属性设置响应状态码，如果 status 不存在，则设置为 500（内部服务器错误）。
//     res.status(err.status || 500);
//     //渲染名为 error 的视图文件，向客户端返回错误页面。
//     res.render('error');
// });
app.use(errorHandler)

// 启动时
const { processRushTimeoutBatch, processOrderExpireBatch } = require('./service/order_monitor_service');
// 每30秒扫一次 合适开始、合适结束
const intervalId1 = setInterval(() => processRushTimeoutBatch(200), 30_000); //30000毫秒等于30秒
const intervalId2 = setInterval(() => processOrderExpireBatch(200), 30_000);
console.log(`intervalId1:${intervalId1}, intervalId2:${intervalId2}`)


module.exports = app;
